unit ContaMovimentacaoRecordFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ComCtrls, DBCtrls, ActnList, Buttons, DBGrids, EditBtn,
  MainRecordFr, DataRecord;

type

  { TContaMovimentacaoRecordFrame }

  TContaMovimentacaoRecordFrame = class(TMainRecordFrame)
    DBEdit2: TDBEdit;
    Label3: TLabel;
    ValorEdit: TCalcEdit;
    DBCalendar1: TDBCalendar;
    DBEdit1: TDBEdit;
    DBGrid1: TDBGrid;
    GroupBox3: TGroupBox;
    ContaDBLookupCombo: TDBLookupComboBox;
    PlanoDBLookupCombo: TDBLookupComboBox;
    TipoDBRadioGroup: TDBRadioGroup;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure CancelarActionExecute(Sender: TObject);
    procedure ExcluirActionExecute(Sender: TObject);
    procedure FecharActionExecute(Sender: TObject);
    procedure InserirActionExecute(Sender: TObject);
    procedure PlanoDBLookupComboSelect(Sender: TObject);
    procedure SalvarActionExecute(Sender: TObject);
    procedure SetDataRecord(Data: TDataRecord); override;
  private
    { private declarations }
  public
    { public declarations }
  end;

implementation

uses
  ContaMovimentacaoDM, MainFm, Initializator, MainFr, ContaDM, PlanoContaDM;

{ TContaMovimentacaoRecordFrame }

procedure TContaMovimentacaoRecordFrame.InserirActionExecute(Sender: TObject);
begin
  DBCalendar1.Date := ContaMovimentacaoData.BuscaData();
  inherited;
  ContaMovimentacaoData.ContaMovimentacaoZQuery.Connection.StartTransaction();
  ContaMovimentacaoData.ContaMovimentacaoZQuery.FieldByName('id_usuario').AsInteger :=
    MainForm.Usuario;
end;

procedure TContaMovimentacaoRecordFrame.PlanoDBLookupComboSelect(Sender: TObject);
var
  tipo: string;
  I: integer;
begin
  //Método que vai alterar o grupo box Tipo para Receita ou despesa de acordo com o plano de contas
  with PlanoContaData.PlanoContaZQuery do begin
    for I := 0 to RecordCount - 1 do begin
      RecNo := I;
      if FieldByName('id_plano_conta').AsString = PlanoDBLookupCombo.KeyValue then
      begin
        tipo := FieldByName('tipo').AsString;
      end;
    end;
  end;
  if tipo = 'R' then begin
    TipoDBRadioGroup.ItemIndex := 0;
  end else begin
    TipoDBRadioGroup.ItemIndex := 1;
  end;
end;

procedure TContaMovimentacaoRecordFrame.ExcluirActionExecute(Sender: TObject);
var
  Valor: real;
begin
  Valor := StrToFloatDef(ValorEdit.Text, 0);
  //Verifica se é Receit ou Despesa e atualiza o saldo da Conta
  if ContaMovimentacaoData.ContaMovimentacaoZQuery.FieldByName(
    'tipo').AsString = 'R' then begin
    ContaMovimentacaoData.AtualizaSaldoConta(
      ContaDBLookupCombo.KeyValue, 'D', FloatToStr(Valor));
  end else begin
    ContaMovimentacaoData.AtualizaSaldoConta(
      ContaDBLookupCombo.KeyValue, 'R', FloatToStr(Valor));
  end;
  inherited;
end;

procedure TContaMovimentacaoRecordFrame.FecharActionExecute(Sender: TObject);
begin
  inherited;
  TheControl.ShowFrame(TMainFrame(CaixaFrame));
end;

procedure TContaMovimentacaoRecordFrame.CancelarActionExecute(Sender: TObject);
begin
  ContaMovimentacaoData.ContaMovimentacaoZQuery.Connection.Rollback();
  inherited;
end;

procedure TContaMovimentacaoRecordFrame.SalvarActionExecute(Sender: TObject);
var
  IDCaixa: string;
begin
  //Verifica se a conta é o Caixa
  if ContaDBLookupCombo.Text = 'Caixa' then begin
    //busca o ID do Caixa
    IDCaixa := ContaMovimentacaoData.BuscaIDCaixa();
    if IDCaixa = '' then begin
      if MessageDlg('Confirmação', 'Caixa não está Aberto! Deseja Abrir?',
        mtConfirmation, mbYesNo, 0) = mrYes then begin
        TheControl.ShowFrame(TMainFrame(CaixaInicioRecordFrame));
      end else begin
        ShowMessage('Escolha outra Conta!');
      end;
    end else begin
      //Se o caixa não está fechado
      //Verifica se é Receita ou Despesa
      if TipoDBRadioGroup.ItemIndex = 0 then begin
        ContaMovimentacaoData.AtualizaSaldoConta(
          ContaDBLookupCombo.KeyValue, 'R', FloatToStr(StrToFloatDef(ValorEdit.Text, 0)));
      end else begin
        ContaMovimentacaoData.AtualizaSaldoConta(
          ContaDBLookupCombo.KeyValue, 'D', FloatToStr(StrToFloatDef(ValorEdit.Text, 0)));
      end;
      //Finaliza a Transacao
      ContaMovimentacaoData.ContaMovimentacaoZQuery.FieldByName('valor').AsFloat :=
        StrToFloatDef(ValorEdit.Text, 0);
      ContaMovimentacaoData.ContaMovimentacaoZQuery.Post();
      ContaMovimentacaoData.ContaMovimentacaoZQuery.Connection.Commit();
      ContaData.ContaZQuery.Refresh();
      ControlaBotoes();
    end;
  end else begin
    //Se a conta não for o Caixa
    //Verifica se é Receita ou Despesa
    if TipoDBRadioGroup.ItemIndex = 0 then begin
      ContaMovimentacaoData.AtualizaSaldoConta(
        ContaDBLookupCombo.KeyValue, 'R', FloatToStr(StrToFloatDef(ValorEdit.Text, 0)));
    end else begin
      ContaMovimentacaoData.AtualizaSaldoConta(
        ContaDBLookupCombo.KeyValue, 'D', FloatToStr(StrToFloatDef(ValorEdit.Text, 0)));
    end;
    //Finaliza a Transação
    ContaMovimentacaoData.ContaMovimentacaoZQuery.FieldByName('valor').AsFloat :=
      StrToFloatDef(ValorEdit.Text, 0);
    ContaMovimentacaoData.ContaMovimentacaoZQuery.Post();
    ContaMovimentacaoData.ContaMovimentacaoZQuery.Connection.Commit();
    ContaData.ContaZQuery.Refresh();
    ControlaBotoes();
  end;

end;

procedure TContaMovimentacaoRecordFrame.SetDataRecord(Data: TDataRecord);
begin
  ValorEdit.Text := Data.getValue('valor');
  inherited SetDataRecord(Data);
end;

initialization
  {$I contamovimentacaorecordfr.lrs}

end.
